
//  Multiply.txt

void main()
{
// Calculate product of two numbers

int NumberA;
int NumberB;
int Results;

NumberA = 456;
NumberB = 92;


Results = _Multiply(NumberA,NumberB); //  456 * 92 = 41,952

_Exit();
}



// multiplication by addition and shifting
//            abc x ef
//    abc
//     ef
//     ^^
//     ||
//     |-----multiply abc times f
//     ------multiply abc times e times 16 , total = product

// Multiple 2 positive integers
// t2 = input_Multiplier
// t1 = input_Multplicand

// output
// t1 = Product
int _Multiply()  //a-
{
assign t1 InputMultiplicand
assign t2 Multiplier
assign t1 Product
assign t3 Multiplicand;
assign t4 Temp
assign t4 Digit

//s- Multiplier x Multiplicand = Product

cout << "Multiply "   << x6  <<  " times " << x7 << endl;

addi Multiplicand,InputMultiplicand,0   //  set Multiplicand

//s- Product = 0
addi Product,zero,0	// zero Product register

//Y-Next Multiplier > Multiplicand ?
blt Multiplier,Multiplicand,Next

//s- Switch positions, lowest to Multiplicand
addi Temp,Multiplicand,0  	
addi Multiplicand,Multiplier,0
addi Multiplier,Temp,0

Next:

//s- Print Values
cout << "Multipicand = " << x28  << endl;
cout << "Multiplier = " << x7  << endl;

Digits:
//s- digit = lowest 16 of Multiplier
addi Digit,Multiplier,0
andi Digit,Digit,15

//s- Multiplier = Multiplier / 16
srli Multiplier,Multiplier,4    // for next digit

cout << "Multipling by hex " << x29  << endl;


Add2Total:
//s- Product += digit * Multiplicand
//s- multiply by addition

beq Digit,zero,NextDigit
add Product,Product,Multiplicand
addi Digit,Digit,-1             // decrement t1

//Y-Add2Total Done ?
bne  Digit,zero,Add2Total       // = 0 ?

NextDigit:
// shift for next digit
slli Multiplicand,Multiplicand,4    // Multiplicand * 16


//N-Digits Multiplier has more digits ?
bne  Multiplier,zero,Digits

//s- Print results
cout << "Result = "  << x6  << endl;
//x-
}
